
public class Mapa {
	public Wezel[] tablica;
	public Mapa(int[][] tablica) {
		
		
		this.generujWezly(tablica);
		this.koloruj(this.tablica[0], new Wezel(0,0));
		//System.out.println(toString2(this.tablica));
		System.out.println(toString2(this.tablica));
	}
	public String toString2(Wezel[] param) {
		String pomoc = new String();
		
		for(int i=0; i<param.length; i++){
			if(param[i]!=null) {
				
			
			pomoc+=param[i].numer+"|" + param[i].kolor + "|";
			for(int j=0; j<param[i].support.length; j++){
				if(param[i].support[j]!=null) {
				pomoc+=param[i].support[j].numer;
				}
				if(1<param[i].rozmiar&&j<param[i].rozmiar-1) {
					pomoc+="&";
				}
				
			}
			pomoc.replaceAll(" ", new String());
			pomoc+="/";
			}
		}
		
	return pomoc;
	}
	public void generujWezly(int[][] tab) {
		tablica = new Wezel[tab.length];
		for(int i=0; i<tab.length; i++){
			tablica[i] = new Wezel(i, tab.length);
		}
		
		
		for(int i=0; i<tablica.length; i++){
			for(int j=0; j<tab[i].length; j++) {
				if(tab[i][j] == 1) {
					
					int pomoc = tablica[i].rozmiar;
					tablica[i].support[pomoc] = tablica[j];
					tablica[i].rozmiar++;
				
				}
			}
		}
		
	}
	public void koloruj(Wezel wezel, Wezel poprzednik) {
		wezel.kolor = rozny(wezel);
		for(int i=0; i<wezel.rozmiar; i++) {
			
			if(wezel.support[i].kolor==0&&wezel.support[i]!=poprzednik) {
				
				koloruj(wezel.support[i], wezel);
			}
			
		}
		
	}
	
	public int rozny(Wezel wezel) {
		String odrzucone = new String();
		int kolor=0;
		
		for(int i=0; i<wezel.rozmiar; i++) {
			int pomoc = wezel.support[i].kolor;
			if(odrzucone.indexOf(pomoc)==-1) {
			odrzucone += wezel.support[i].kolor;
			}
			
		}
		kolor = pozostaly(odrzucone);
		if(kolor==0) {
			Wezel sasiad = wezel.lekkiSasiad();
			kolor = sasiad.kolor;
			koloruj(sasiad, wezel);
			//znajdz najblizszy vertex z najmneijsza ilsocia wezlow i pokoloruj go na nowo
		}
		return kolor;
	}
	public int pozostaly(String param) {
		if(param.indexOf('1')==-1) {
			return 1;
		} else if(param.indexOf('2')==-1) {
			return 2;
		}
		else if(param.indexOf('3')==-1) {
		return 3;
		}
		else if(param.indexOf('4')==-1) {
	return 4;
		}
		else  {
			
			return 0;
			
		}
	}
	
}
